package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

/**
 * @author Fengkai
 * 给定一个正整数数组，设为 nums，最大为 100 个成员，求从第一个成员开始，正好走到数组最后一个成员，所使用的最少步骤数。
 * 要求：
 * 1、第一步必须从第一元素开始，且 1<=第一步的步长<len/2;（len 为数组的长度，需要自行解析）。
 * 2、从第二步开始，只能以所在成员的数字走相应的步数，不能多也不能少, 如果目标不可达返回-1，只输出最少的步骤数量。
 * 3、只能向数组的尾部走，不能往回走。
 * @creat 2023/4/2
 */
public class FindEnd {


    public static void main (String[] args) {
        int[] ints = {7, 5, 9, 4, 2, 6, 8, 3, 5, 4, 3, 9};
        int[] int2 = {1, 2, 3, 7, 1, 5, 9, 3, 2, 1};
        System.out.println(myMethod(int2));

    }

    public static int myMethod (int[] nums) {
        int step = 101;

        out:
        while (true) {
            for (int i = 1; i < nums.length / 2; i++) {
                step = Math.min(step, getStep(i, nums, 0, 0) == -1 ? 101 : getStep(i, nums, 0, 0));
                if (i == nums.length / 2 - 1) {
                    break out;
                }
            }
        }

        return step == 101 ? -1 : step;
    }

    private static int getStep (int steps, int[] nums, int index, int count) {
        index = index + steps;
        if (index >= nums.length) {
            return -1;
        }
        count++;
        steps = nums[index];
        if (index == nums.length - 1) {
            return count;
        }
        return getStep(steps, nums, index, count);
    }
}
